home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 21 / Cream of the Crop 21 (Terry Blount) (October 1996).iso / program / libkb100.zip / LIBKB-1.00 / SAMPLES / SIMPLE.C < prev    next >
C/C++ Source or Header  |  1996-07-23  |  3KB  |  137 lines

  1. /* simple.c -- very simple usage example of the libkb keyboard library
  2.  * Copyright (C) 1995, 1996 Markus F.X.J. Oberhumer
  3.  * For conditions of distribution and use, see copyright notice in kb.h 
  4.  */
  5.  
  6.  
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <string.h>
  10.  
  11. #include <kb.h>
  12. #include "intro.h"
  13.  
  14.  
  15. /***********************************************************************
  16. // 
  17. ************************************************************************/
  18.  
  19. static int q_pressed(void)
  20. {
  21.     kb_update();
  22.  
  23.     if (kb_key(KB_SCAN_Q))
  24.     {
  25.         if ((kb_key(KB_SCAN_LCONTROL) || kb_key(KB_SCAN_RCONTROL)) &&
  26.             (kb_key(KB_SCAN_LSHIFT) || kb_key(KB_SCAN_RSHIFT)))
  27.             return 1;
  28.         if (kb_key(KB_SCAN_ALTGR))
  29.             return 1;
  30.     }
  31.     return 0;
  32. }
  33.  
  34.  
  35. /***********************************************************************
  36. // 
  37. ************************************************************************/
  38.  
  39. int main(int argc, char *argv[])
  40. {
  41.     int i;
  42.     char s[80+1];
  43.     unsigned last_key = 0;
  44.     unsigned long f = 0;
  45.  
  46.     if (argc < 0 || argv == NULL)    /* avoid warning about unused args */
  47.         return 0;
  48.  
  49.     fputs("\n",stdout);
  50.     fputs(_kb_intro_text(s),stdout);
  51.     fputs("\n\n",stdout);
  52.  
  53.  
  54.     if (argc > 1)
  55.     {
  56.         printf("reading with kb_os_waitkey(), press 'Q' to end\n");
  57.         for (;;)
  58.         {
  59.             int k = kb_os_waitkey();
  60.             if (k)
  61.             {
  62.                 printf("%3d  0x%02x  '%c'\n", k, k, 
  63.                     k >= 32 && k < 127 ? k : '.');
  64.             }
  65.             if (k == 'q' || k == 'Q')
  66.                 break;
  67.         }
  68.         fputs("\n\n",stdout);
  69.     }
  70.  
  71.  
  72.     if (argc > 1)
  73.         f |= KB_FLAG_EMERGENCY_EXIT | KB_FLAG_EMERGENCY_SIGALRM;
  74.     if (kb_install(f) != 0)
  75.     {
  76.         printf("Couldn't install keyboard handler !\n");
  77.         exit(1);
  78.     }
  79.  
  80.     printf(KB_INSTALLED_MSG);
  81.     printf("\nHit any key to test, Ctrl-Shift-Q or AltGr-Q to quit\n\n");
  82.  
  83.     while (!q_pressed())
  84.     {
  85.         int c = 0;
  86.  
  87.         if ((last_key = kb_last_key()) != 0)
  88.         {
  89.             int k = last_key & 0x7f;
  90.             kb_last_key_set(0);
  91.             printf("%3d  0x%02x  %s\n", k, k, kb_keyname(k));
  92.         }
  93.  
  94.         while (KB_ANY_MASK(kb_shift(), KB_SHIFT_ANY_CONTROL) &&
  95.             KB_ANY_MASK(kb_shift(), KB_SHIFT_ANY_ALT) &&
  96.             (kb_key(KB_SCAN_DELETE) || kb_key(KB_SCAN_PERIOD_PAD)))
  97.         {
  98.             kb_update();
  99.             if (c == 0)
  100.             {
  101.                 printf("Control-Alt-Del pressed\n");
  102.                 c = 1;
  103.             }
  104.         }
  105.  
  106.         if (kb_shift() & KB_SHIFT_CONTROL_BREAK)
  107.         {
  108.             printf("Control-Break pressed\n");
  109.             kb_shift_off(KB_SHIFT_CONTROL_BREAK);
  110.         }
  111.  
  112.         if (kb_shift() & KB_SHIFT_PAUSE)
  113.         {
  114.             if (KB_ALL_MASK(kb_shift(), KB_SHIFT_ANY_CONTROL))
  115.                 printf("LControl-RControl-Break pressed\n");
  116.             else
  117.                 printf("Pause pressed\n");
  118.             kb_shift_off(KB_SHIFT_PAUSE);
  119.         }
  120.     }
  121.  
  122.     printf("\n");
  123.     printf("%d keys now pressed: ", kb_keys_pressed());
  124.     for (i = 0; i < 128; i++)
  125.         if (kb_key(i))
  126.             printf("%02x ", i);
  127.     printf("\n");
  128.     fflush(stdout);
  129.  
  130.     return 0;
  131. }
  132.  
  133.  
  134. /*
  135. vi:ts=4
  136. */
  137.